-- 13/06/2010 javier07b9@hotmail.com -- EUPHORIA LANGUAGE -- Capítulo 5 - Sonido con winmm.dll -- Euphoria necesita de las librerias para poder acceder al sonido, si bien posee para -- DOS32 la función sound() con sonidos melódicos, en Windows o Linux no es posible. -- Por eso es cuestión de acceder a la libreria, podemos usar SDL la cual nos provee -- de todo para el sonido, aunque ahora mostraré que nos proporciona Windows. -- Básicamente cargaremos en ram la winmm.dll, cuya libreria nos aporta la función -- PlaySound para formatos ".wav", y la utilizaremos como otros lenguajes lo hacen. ------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------ -- Empezaremos por incluir los archivos que nos permiten trabajar con DLL. include dll.e include machine.e -- Necesitamos un identificador para la DLL. atom winmm -- Y las constantes que PlaySound necesita. constant SND_FILENAME = #00020000, SND_ASYNC = #00000001 -- Cargamos en ram la DLL. winmm = open_dll("winmm.dll") -- Creamos una función para enlazar la función deseada en la libreria. -- Esta función devuelve el handle o manejador de la función. function link_c_proc(atom dll, sequence name, sequence args) integer handle handle = define_c_proc(dll, name, args) if handle = -1 then puts(1,"La libreria no pudo abrirse...") else return handle end if end function -- El handle devuelto será el número de función a llamar. integer PlaySound -- y una dirección de memoria donde se halle la ruta del archivo sonoro. atom wav_file -- Creamos una secuencia y almacenamos en ella la ruta. sequence s s="\\Windows\\Media\\tada.wav" -- alojamos en memoria la ruta del archivo sonoro. wav_file = allocate_string(s) -- obtenemos el handle de la función con sus parámetros. PlaySound= link_c_proc(winmm, "PlaySound", {C_INT,C_INT,C_INT}) -- y por fin llamamos a la función con sus argumentos para que suene. c_proc(PlaySound, {wav_file, NULL, or_bits(SND_FILENAME, SND_ASYNC)}) puts(1,s) puts(1," \n\nPulse tecla para finalizar...") while get_key()=-1 do end while -- Esta es una manera muy sencilla de sonar archivos .wav, lamentablemente -- para juegos y demás se hace un poco torpe. -- Por ello recomiendo continuar con SDL si pretendemos algo más elaborado.